In computer graphics, the use of a graphics pipeline is well-known. The graphics pipeline refers to a rasterization-based rendering that is supported by graphics hardware. The graphics pipeline typically accepts some representation of a three-dimensional (3-D) scene as an input and transforms the 3-D image into a 2-D raster image as an output to be displayed on a 2-D display screen. This transformation is performed in stages starting with processing information provided as properties at vertices or end points or control points of geometric primitives describing what is to be referenced. These geometric primitives include lines and triangles, while the properties per vertex include Red Green Blue (RGB) values, x-y-z coordinates, reflectivity, translucency, etc. The two conventional graphics pipelines include OpenGL and Direct3D.
The graphical pipeline operates like a stream process (like a central processing unit (CPU) pipeline architecture) in taking large tasks and breaking them down into smaller portions and stages, which allows the graphical pipeline to handle multiple things at once, making the overall clock speed equivalent to the slowest for those stages. Using conventional techniques, the graphic pipeline is mapped to graphics acceleration hardware such that the input to the graphics processing unit (GPU) in a graphics card is in the form of vertices, which then undergo transformation and other per-vertex processing followed by clipping and rasterization to form fragments. The final pixel values obtained from theses fragments are then outputted to the frame buffer for display. Further, each of the vertices and fragments are considered independent and this way, all states of the graphics pipeline can be used simultaneously for various vertices and fragments as they are processed though the pipeline.
Typical graphics pipelines require transparent fragments to be sorted prior to entry into the pipeline in order to be rendered correctly. These pipelines are sometimes augmented to employ special purpose hardware that supports lists of fragments for transparency. These solutions are extremely expensive and limited in their capabilities and thus, they provide a very limited application. For example, some current solutions for GPUs store the same number of translucent fragments for each pixel, which restricts these solutions to very uniform problems with small, fixed, and upper bounds on the lengths of the lists (e.g., 4 or 8). Further, these solutions require dedication of storage to “empty” lists and thus, processing these empty lists is extremely inefficient and wastefully consumes the system's memory and bandwidth. Some of these current solutions take over memory reserved for multi-sample anti-aliasing (MSAA) to store multiple fragments per pixel, which makes it impossible to use MSAA and multiple fragments in the same application.